package azalea.mqtt.message.utils;

public class LengthUtil {
	public static byte[] calc(int len) {
		byte[] bts=new byte[10];
		int index=0;
		do {
		    byte encodedByte =(byte) (len % 128);
		    		len = len / 128;
		    // if there are more data to encode, set the top bit of this byte
		    if ( len > 0 ) {
		        encodedByte = (byte) (encodedByte | (byte)0b10000000);
		    }
		    bts[index]= encodedByte;
		    index++;
		}
		while ( len > 0 );
		byte[] result=new byte[index];
		for(int i=0;i<index;++i) {
			result[i]=bts[i];
		}
		return result;
	}
	public static int[] parseLength(byte[] payload,int start) {
		int[] pair=new int[2];
		//int calc
		pair[0]=0;
		pair[1]=1;
		for(int i=start;i<4;++i,pair[1]++) {
			int item=payload[i]&0xff;
			if(item<128) {
				pair[0]+=item*Math.pow(128,(i-start));
				break;
			}else {
				item-=128;
				pair[0]+=item*Math.pow(128,(i-start));
			}
		}
		return pair;
	}
	//2 097 152 (0x80, 0x80, 0x80, 0x01) 
	public static void main1(String[] args) {
		byte[] bbb= {(byte)0x3f,(byte) 0xff,(byte) 0xff,(byte) 0x7f};
		int[] pair=parseLength(bbb,0);
		System.out.println(pair[0]);
		System.out.println(pair[1]);
	}
	
	//30 C4 D8 02 00 03 4A 53
	
	public static void main(String[] args) {
		byte[] bbb= {(byte)0x30,(byte) 0xC4,(byte) 0xD8,(byte) 0x02,(byte) 0x00,(byte) 0x03};
		int[] pair=parseLength(bbb,1);
		System.out.println(pair[0]);
		System.out.println(pair[1]);
	}
}
